/*
 * ColaClientes.cpp
 *
 *  Created on: Nov 4, 2011
 *      Author: gonzalo
 */

#include "ColaClientes.h"
#include "../common/utils/Logger.h"

ColaClientes::ColaClientes() {

}

ColaClientes::~ColaClientes() {
	std::list<ConexionServer*>::iterator it = this->clientes.begin();
	while (it != this->clientes.end())
	{
		delete(*it);
		++it;
	}
}


void ColaClientes::setClient(ConexionServer* cliente){
	Logger::log("ColaClientes", "setClient","Recibio un nuevo cliente" );
	clientes.push_back(cliente);

	signal();
}

ConexionServer* ColaClientes::getClient(){
	Logger::log("ColaClientes", "getCliente","Pide un cliente" );


	//Si la Lista esta vacia me quedo bloqueado hasta que llegue una senial
	if (clientes.empty()) {
		wait();
	}

	ConexionServer* retorno = clientes.front();
	clientes.pop_front();

	return retorno;
}

void ColaClientes::propagarDTO(DTO* dto){
	ConexionServer* aux;

	std::list<ConexionServer*>::iterator it_aux;
	for (it_aux = clientes.begin(); it_aux != clientes.end();
			++it_aux) {
		aux = (*it_aux);
		Logger::log("ColaClientes","propagarDTO","Se envia mensaje A : " + aux->getCliente());
		aux->addToSend(dto);
	}
}

int ColaClientes::getSize(){
	return this->clientes.size();
}
